#ifndef CW_H
#define CW_H

#include "bool.h"
#include "parStr.h"

typedef struct scw * cw;

typedef parStr elem;

cw
cw_create(char * f);
/*
DESC: Constructor. Toma el nombre de archivo. 
      Si el archivo existe lo borra.
      Si es vacio toma la salida estandard.
      Devuelve NULL si no hay memoria.
PRE: { c = NULL /\ f -> F }
  c = cw_create(f);  
POS: {  Hay memoria ==>  c --> cw(F)   
      ! Hay memoria ==>  c = NULL  }   
*/

cw
cw_destroy(cw c);
/*
DESC: Destructor del tipo. c cambia.
PRE: { c --> C }
   c = cw_destroy(c);
POS: { Se destruye C /\ c == NULL }
*/

cw
cw_arr(cw c);
/*
DESC: Arranca la cinta.
PRE: { c --> C }
   c = cw_arr(c);
POS: {  Hay memoria /\ ! Error de Archivo ==> Pi(*c)=[] /\ Pd(*c)=[]
      ! Hay memoria  \/  Error de Archivo ==> Se destruye C /\ c = NULL}
*/

cw
cw_insert(cw c, elem e);
/*
DESC: Inserta un elemento al final.
PRE: { c-->C /\ Pi(C) = Pi /\ Pd(C) = [] }
   c = cw_insert(c);
POS: {  Hay memoria /\ ! Error de Archivo ==> Pi(*c)=Pi:e /\ Pd(*c)=[]
      ! Hay memoria  \/  Error de Archivo ==> Se destruye C /\ c = NULL}
*/

#endif /* CW_H */
